﻿

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.AccessControl;
using Domain.Entidades;
using Domain.Interfaces.Repositorios;
using Domain.Interfaces.Servicos;
using System.Web;
using System.Web.Security;
using System.Web.UI.WebControls;


namespace Domain.Servicos
{
    public class UsuarioService : IUsuarioService
    {
        private readonly IUsuarioRepository _usuarioRepository;

        public UsuarioService(IUsuarioRepository usuarioRepository)
        {
            _usuarioRepository = usuarioRepository;
        }

        public int autentica_usuario(usuario_logado user)
        {
            VW_usuarios _usuario;
            _usuario = _usuarioRepository.autentica_usuario(user);


            if (_usuario == null)
                return 0;
            else if (_usuario.sta_codigo != 1)
                return - 2;
            else
            {
                FormsAuthentication.SetAuthCookie(_usuario.usu_codigo.ToString(), false);
                return _usuario.usu_codigo;
            }
        }

        public bool verifica_usuario()
        {
            string cod = HttpContext.Current.User.Identity.Name;

            if (cod != "")


                return true;
            else
                return false;

        }

        public VW_usuarios GetUsuarioLogado(int codigo)
        {
            try
            {
                string cod ="";

                if (codigo == 0)
                {
                     cod = HttpContext.Current.User.Identity.Name;
                }
                else
                {
                     cod = codigo.ToString();
                }
                if (cod != "")
                {

                
                    return _usuarioRepository.GetUsuarioLogado(int.Parse(cod));
                }
                else return null;
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }


        public void Logout()
        {
            FormsAuthentication.SignOut();
        }


       public bool Verifica_senha_antiga(string senha)
        {


           try
           {
                int cod = int.Parse(HttpContext.Current.User.Identity.Name);
                return _usuarioRepository.Verifica_senha_antiga(senha, cod);
            }
           catch (Exception ex)
           {
               
               throw ex;
           }
        

        }


        public void troca_senha(string senha)
        {

            try
            {

                int codigo = Int32.Parse(HttpContext.Current.User.Identity.Name);
                _usuarioRepository.troca_senha(senha,codigo);

               
            }


            catch (Exception ex)
            {

                throw ex;
            }

        }


        public IEnumerable<VW_usuarios> busca_usuarios_setor_unidade(int tipo, int codigo)

        {
            try
            {
                return _usuarioRepository.busca_usuarios_setor_unidade(tipo, codigo);

            }
            catch (Exception ex)
            {
                

                throw ex;
            }


        }

        public string busca_setor_unidade(string tipo, int uni)
        {
            try
            {
                return _usuarioRepository.busca_setor_unidade(tipo,uni);
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }

        public bool verifica_permissao(int permissao)
        {
            try
            {
                return _usuarioRepository.verifica_permissao(permissao, int.Parse(HttpContext.Current.User.Identity.Name));
            }
            catch (Exception ex)
            {
                
                throw ex;
            }

        }

        public List<VW_usuarios> Listar(string tipo, int set_uni, string nome)
    {

        try
        {


            return _usuarioRepository.Listar(tipo, set_uni, nome);

        }
        catch (Exception ex)
        {

            throw ex;
        }
     

    }


        public IEnumerable<VW_unidade> busca_unidades(int tipo)
        {

            return _usuarioRepository.busca_unidades(tipo);
        }


        public IEnumerable<VW_tipo_email_envio_usuario> busca_email(int tipo, int unidade, int setor)
        {
            try
            {

                return _usuarioRepository.busca_email(tipo, unidade,setor);

            }
            catch (Exception ex)
            {

                throw ex;
            }  

        }

        public IEnumerable<VW_setor> busca_setores()
        {
            try
            {
               return _usuarioRepository.busca_setores();
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }
       


    }


    }
